/**
 * describe:
 *
 * @author chaP
 * @date 2019/04/04
 */
package CodingTest.AC20190403;

import java.util.HashMap;

/**
 *  *
 给定两个字符串 s 和 t ，编写一个函数来判断 t 是否是 s 的一个字母异位词。

 示例 1:

 输入: s = "anagram", t = "nagaram"
 输出: true
 示例 2:

 输入: s = "rat", t = "car"
 输出: false
 说明:
 你可以假设字符串只包含小写字母。

 进阶:
 如果输入字符串包含 unicode 字符怎么办？你能否调整你的解法来应对这种情况？
 */
public class isAnagram {
    //方法一：
    public boolean isAnagram1(String s,String t){
        HashMap<Character,Integer> hs = new HashMap<>();
        for(int i = 0;i<s.length();i++){
           if(hs.containsKey(s.charAt(i))) hs.put(s.charAt(i),hs.get(s.charAt(i))+1);
           else hs.put(s.charAt(i),1);
        }
        for(int j = 0;j<t.length();j++){
            if(!hs.containsKey(t.charAt(j))) return false;
            else if(hs.get(t.charAt(j))==1){
                hs.remove(t.charAt(j));}
            else hs.put(t.charAt(j),hs.get(t.charAt(j))-1);
        }
        if(hs.isEmpty()) return true;
        else return false;

    }
    //方法二：
    public boolean isAngram2(String s,String t){
        int[] arr1 = new int[26];
        int[] arr2 = new int[26];
        for(int i =0;i<s.length();i++){
            arr1[s.charAt(i) - 'a'] ++;
        }
        for(int k = 0;k<t.length();k++){
            arr2[t.charAt(k) -'a']++;
        }
        for(int j = 0;j<26;j++){
            if(arr1[j] != arr2[j])
                return false;
        }
        return true;
    }
}
